/*
 * author      : 吴中勤
 * date        : 2018/6/26
 * description : 工具类
 */

package com.deepexi.adapter.common;

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;

import java.util.Arrays;
import java.util.List;
import java.util.UUID;

public class CommonUtils {

    private static final String BLANK_STRING = "";

    /** 获取 默认值 */
    public static String defaultIfNull(String srcStr, String defaultStr) {
        return null == srcStr ? defaultStr : srcStr;
    }

    public static boolean isStringValid(String s) {
        return null != s && !"".equals(s);
    }

    /** 获取uuid, 目前采用java自带的uuid */
    public static String uuid() {
        return UUID.randomUUID().toString()
                .replace("-", "")
                .substring(0, 32);
    }

    /** 获取uuid, 目前采用java自带的uuid , 默认长度32 */
    public static String uuid(int length) {
        return UUID.randomUUID().toString()
                .replace("-", "")
                .substring(0, length);
    }


    /** 当前stack中 类名 & 方法名, 日志中常用到 */
    public static String currentClassAndMethod() {
        final StackTraceElement e = Thread.currentThread().getStackTrace()[2];
        final String s = e.getClassName();
        return s.substring(s.lastIndexOf('.') + 1, s.length()) + "." + e.getMethodName();
    }

    /** 对象 -> json string */
    public static String objectToJson(Object obj) {
        // pretty
        // Gson gson = new GsonBuilder().setPrettyPrinting(s).create();
        // return gson.toJson(obj);

        // plain 版本
        return new Gson().toJson(obj);
    }

    /** json string -> 对象 */
    public static <T> T jsonString2Obj(String json, Class<T> type) {
        if (null == json) return null;
        return new Gson().fromJson(json, type);
    }

    /** 范型 */
    public static <T> List<T> getList(final Class<T[]> clazz, final String json) {
        final T[] jsonToObject = new Gson().fromJson(json, clazz);
        return Arrays.asList(jsonToObject);
    }

    /** json -> list[对象] */
    public static <T> String list2String(List<T> list) {
        return new Gson().toJson(list);
    }

    /** string !=null 且 不为"" */
    public static boolean stringNotBlankAndNull(String s) {
        return !(null == s || BLANK_STRING.equals(s));
    }

    /** json string -> JsonObject */
    public static JsonObject fromString(String json) {
        return new Gson().fromJson(json, JsonObject.class);
    }

//    public static <T> List<T> string2ObjList(String str, Class<T> type) {
//        List<T> list = new Gson().fromJson(str, new TypeToken<List<T>>() {
//        }.getType());
//        return list;
//    }

}
